package ar.fiuba.tp7552.buildadmin.service;

import java.util.Collection;

import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.security.access.prepost.PreAuthorize;

import ar.fiuba.tp7552.buildadmin.model.BusinessException;
import ar.fiuba.tp7552.buildadmin.model.auth.User;
import ar.fiuba.tp7552.buildadmin.model.gastos.Gasto;
import ar.fiuba.tp7552.buildadmin.model.gastos.GastoCriteria;

public interface GastoService {
	
//	@PostFilter("hasPermission(filtredObject.edificio, 'gasto')")
	Collection<Gasto> getAll();
	
	@PreAuthorize("hasPermission(#gasto.edificio, 'gasto')")
	public void create(Gasto gasto, User user) throws BusinessException;
	
	@PostAuthorize("hasPermission(returnObject.edificio, 'gasto')")
	public Gasto get(Long gastoId);
	
	@PreAuthorize("hasPermission(#gasto.edificio, 'gasto') and #gasto.consolidado == false")
	public void update(Gasto gasto, User user) throws BusinessException;
	
	@PreAuthorize("( hasPermission(#gasto.edificio, 'gasto') or hasRole('ROLE_ADMIN') ) and #gasto.consolidado == false")
	public void delete(Gasto gasto);
	
	Collection<Gasto> findByCriteria(GastoCriteria criteria);
}
